// axios的配置文件
import Vue from 'vue'
import axios from 'axios'
let baseURL = ''

// 判断环境
if (true) {
  // 开发环境
  baseURL = '/api'
} else {
  // 生产环境
  baseURL = ''
}

const http = axios.create({
  baseURL: baseURL,  // 引入baseURL
  timeout: 1000
})

// 请求拦截器
http.interceptors.request.use((config) => {
  // 获取数据时除了接口地址和参数以外，还需要token来验证身份。
  // 打开shop-api的验证代码后，如果没有token就不反回数据
  let info = JSON.parse(localStorage.getItem('userInfo'));
  if(config.url != '/userlogin' && info) {
    // 登录时不需要token，其他的需要
    // authorization就是token对应的字段名，固定的
    config.headers.authorization = info.token;
  }
  return config
}, (err) => {
  return err
})

// 响应拦截器
http.interceptors.response.use((data) => {
  return data.data
}, (err) => {
  return err
})

export default http

// 封装get请求
// new Promise()实例化中接收一个函数作为参数
// resolve中接收成功的结果作为参数，reject中接收失败的结果作为参数
export function get(url, params = null) {
  return new Promise((resolve, reject) => {
    http.get(url, { params }).then(res => {
      // 状态由等待变为成功，传的参数作为then函数中成功函数的实参
      resolve(res.data)
    }).catch(err => {
      reject(err.data)
    })
  })
}

// 封装post请求

export function post(url, params, isFile = false) {

  // 1.设置请求头
  let config = {
    headers: {
      "Content-Type": "application/x-www-form-urlencoded"
    }
  }
  //3.处理表单的数据
  let data = qs.stringify(params);

  if (isFile) {
    // 设置请求
    config = {
      header: {
        "Content-Type": "multiple/form-data"
      }
    }

    //处理有文件的数据
    let data = new FormData()
    for (let i in params) {
      data.append(i, params[i])
    }
  }
  return new Promise((resolve, reject) => {
    http.post(url, data, config).then(res => {
      resolve(res.data)
    }).catch(err => {
      reject(res.data)
    })
  })

}